package greetings

import "fmt"

//返回一个匿名函数
func _() func() int {
	x := 1
	fmt.Println(x)
	return func() int {
		return x
	}

}

func AnonymousFuncDemo() {
	//匿名函数 函数可以赋值给变量
	fn := func() { fmt.Println("hello world") }
	fn()

	//匿名函数可以作为结构体的field，
	//这点很C
	d := struct {
		name func() string
	}{
		func() string {
			return "hanmeimei!"
		},
	}

	//注意，name是一个函数
	myName := d.name()
	fmt.Println("my name is:", myName)

	// --- function collection ---
	// 数组的元素是函数，这点很C
	fns := [](func(x int) int){
		func(x int) int { return x + 1 },
		func(x int) int { return x + 2 },
	}
	fmt.Println(fns[0](100))

	// --- channel of function ---
	fc := make(chan func() string, 2)
	fc <- func() string { return "Hello, World!" }
	fmt.Println((<-fc)())
}
